package group.raber.dataform.handler;

import group.raber.dataform.model.DataForm;
import group.raber.saber.jdbc.query.PaginationQueryResult;
import group.raber.saber.lang.ValueObject;

import java.util.List;
import java.util.Map;

/**
 * 列表数据的查询,保存处理
 * Created by tisir<yangsong158@qq.com> on 2017-05-29
 */
public interface DataListHandler<T> {

    public void beforeQuery(DataForm dataForm, Map<String,Object> queryParameters, Map<String,ValueObject> filterParameters,Map<String,String> sortMap,int pageSize, int pageIndex);
    /**
     * 查询列表数据
     * @param dataForm
     * @param queryParameters 查询条件参数
     * @param filterParameters 筛选条件参数
     * @param pageSize 分页大小
     * @param pageIndex 分页索引
     * @return
     */
    public PaginationQueryResult<T> query(DataForm dataForm, Map<String,Object> queryParameters, Map<String,ValueObject> filterParameters, Map<String,String> sortMap, int pageSize, int pageIndex);
    public void afterQuery(DataForm dataForm, Map<String,Object> queryParameters, Map<String,ValueObject> filterParameters,Map<String,String> sortMap,int pageSize, int pageIndex,PaginationQueryResult<T> result);

    /**
     * 保存列表数据
     * @param dataForm
     * @param dataList
     * @return
     */
    public List<T> save(DataForm dataForm,List<T> dataList);

    /**
     * 插入之前
     * @param dataForm
     * @param dataList
     */
    public void beforeInsert(DataForm dataForm,List<T> dataList);

    /**
     * 插入之后
     * @param dataForm
     * @param dataList
     */
    public void afterInsert(DataForm dataForm,List<T> dataList);
    /**
     * 插入之前
     * @param dataForm
     * @param dataList
     */
    public void beforeUpdate(DataForm dataForm,List<T> dataList);

    /**
     * 插入之后
     * @param dataForm
     * @param dataList
     */
    public void afterUpdate(DataForm dataForm,List<T> dataList);


    /**
     * 保存列表数据
     * @param dataForm
     * @param dataList
     * @return
     */
    public Integer delete(DataForm dataForm,List<T> dataList);

    /**
     * 删除之前
     * @param dataForm
     * @param dataList
     */
    public void beforeDelete(DataForm dataForm,List<T> dataList);

    /**
     * 删除之后
     * @param dataForm
     * @param dataList
     */
    public void afterDelete(DataForm dataForm,List<T> dataList);

}
